package com.wn.cainiao.utils

import androidx.fragment.app.Fragment
import com.wn.course.view.CourseFragment
import com.wn.home.view.HomeFragment
import com.wn.mine.view.MineFragment
import com.wn.study.view.StudyFragment
import dagger.hilt.android.scopes.ActivityScoped
import javax.inject.Inject

/**
 * @Author: wn
 * @Date: 2023/3/27 16:42
 * @Description: 提供 Fragment 的 函数
 */

@ActivityScoped
class FragmentProvider @Inject constructor() {
  /**
   * 可以起到复用的效果，首次get对象会初始化，再次get会获取 map 对象的值
   * 将索引值和fragment做一个关系映射
   * 将Fragment改为ReFragment，
   * lambda 执行 返回 Fragment 此时Fragment UI不可见就销毁，但数据保存,可见就是新的
   */
  val fragments: Map<Int, ReFragment> by lazy {
    mapOf(
      INDEX_HOME to { HomeFragment() },
      INDEX_COURSE to { CourseFragment() },
      INDEX_STUDY to { StudyFragment() },
      INDEX_MINE to { MineFragment() }
    )
  }

  // 定义一些抽象的常量
  companion object {
    const val INDEX_HOME = 0 // 首页 home 对应的索引位置
    const val INDEX_COURSE = 1 // 课程 course
    const val INDEX_STUDY = 2 // 学习中心 study
    const val INDEX_MINE = 3 // 我的  mine
  }
}
// 类型别名定义 高阶函数定义  传入 值 为 lambda { 返回 Fragment}
typealias ReFragment = () -> Fragment
